package com.jumi.microservice.service;


import com.jumi.microservice.common.page.TableDataInfo;
import com.jumi.microservice.domain.*;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 商品中心对外提供的接口
 *
 * @author Administrator
 */
@RequestMapping("/commodity")
public interface CommodityApi {

    /**
     * 根据商品名称查询商品spu(活动模块)
     *
     * @param name 商品名称
     * @return 商品Spu
     */
    @GetMapping(value = "/getGoodsSpuByName")
    List<GoodsSpuDTO> getGoodsSpuByName(@RequestParam("name") String name);

    /**
     * 根据商品名称分页查询商品spu(活动模块)
     *
     * @param goodsSearchQuery 商品查询实体
     * @return 商品Spu
     */
    @GetMapping(value = "/getGoodsSpuByNameAndPage")
    TableDataInfo<GoodsSpuDTO> getGoodsSpuByNameAndPage(GoodsSearchQuery goodsSearchQuery);

    /**
     * 根据spuid集合查询商品(活动模块)
     *
     * @param goodsIds 商品spuid集合
     * @param isFront  前端:true,后端false
     * @return 商品
     */
    @PostMapping(value = "/getGoodsSpuByIds")
    List<GoodsSpuDTO> getGoodsSpuByIds(@RequestBody List<Long> goodsIds, Boolean isFront, Long uid);

    /**
     * 根据spuid集合查询该spu ID，图片，名称，重量/个(订单模块)
     *
     * @param name 商品spuid名称
     * @return 该spu ID，图片，名称，重量/个
     */
    @PostMapping(value = "/getGoodsByName")
    List<GoodsInfoDTO> getGoodsByName(@RequestParam("name") String name);

    /**
     * 根据skuid集合查询该skuID的图片,名称(退货模块)
     *
     * @param skuIds 商品skuid集合
     * @return 该skuID，图片,名称
     */
    @PostMapping(value = "/getGoodsSkuInfoByIds")
    List<GoodsSkuInfoDTO> getGoodsSkuInfoByIds(@RequestBody List<Long> skuIds);


    /**
     * 根据sku名称模糊查询该skuID
     *
     * @param name 商品sku名称
     * @return 该skuID map集合
     */
    @GetMapping(value = "/getGoodsSkuIdByName")
    Map<Long, String> getGoodsSkuIdByName(@RequestParam("name") String name);

    /**
     * 根据spuid集合查询商品 优选
     *
     * @param goodsIds 商品spuid集合
     * @return 商品
     */
    @PostMapping(value = "/getOptimizationGoodsBySpuIds")
    GoodsgetOptimizationDTO getOptimizationGoodsBySpuIds(@RequestBody List<Long> goodsIds);

    /**
     * 根据分类id获取商品信息 优选
     *
     * @param categoryId 分类id
     * @return
     */
    @PostMapping(value = "goodsByCategory4Activity")
    ActivityGoodsCategoryDTO goodsByCategory4Activity(Long categoryId);

    /**
     * 查询商品的二级分类
     *
     * @return 商品的二级分类集合
     */
    List<CategoryDTO> listCategory();

    /**
     * 根据供应商名称模糊查询商品的供应商集合
     *
     * @param name 供应商名称
     * @return 商品的供应商集合
     */
    List<SupplierDTO> listSupplier(String name);

    /**
     * 热销排行榜商品列表
     *
     * @param topN 需要返回的数量
     * @return 热销排行榜商品列表
     */
    List<HostSaleGoodsDTO> listHostSaleGoods(Integer topN);

    /**
     * 根据spuid集合分页查询(付邮领获取非下架商品 )
     *
     * @param goodsIds 商品spuid集合
     * @return 商品
     */
    GoodsPostageActivityDTO getNoDownGoodsBySpuIds(List<Long> goodsIds, Long page, Long size);

    /**
     * 获取所有的隐私商品的skuid
     * @return
     */
    List<Long> getPrivacyGoodsSkuIds();


    /**
     * 获取所有的隐私商品的spuID
     * @return
     */
    List<Long> getPrivacyGoodsSPuIds();

    /**
     * 根据spuid获取商品信息(活动 包含虚拟销量)
     * @param goodsIds 商品spuid
     * @return
     */
    GoodsActivityDTO getGoodsSpuByIds4Activity(@RequestBody List<Long> goodsIds);


    /**
     * 根据skuid获取第三方商品编码
     */
    Map<Integer,String> getGoodsSkuThirdPartyCode(List<Integer> skuId);

    /**
     * 获取商品spu短名称
     * @param spuId spuid集合
     * @return
     */
    List<GoodsShortNameInfoDTO> getGoodsShortNameInfo4Order(List<Long> spuId);

    /**
     * 获取品牌分页信息
     * @param bid 已存在的品牌id
     * @param name 搜索名称
     * @param current 分页
     * @param size 分页
     * @return
     */
    ActivityGoodsBrandPageDTO getGoodsBrandInfo4Activity(List<Long> bid, String name, Long current, Long size);
}
